package com.kaifamiao.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public class InstantiationTest {

    public static void main(String[] args) throws Exception {

        Class<?> c = Sheep.class;

        // java.lang.Class 类中的  newInstance() 在 Java 9 时已经被废弃
        // 它原本是调用指定类 public 修饰的 无参构造 创建该类的实例

        // 获得带有指定参数列表的构造方法
        Constructor<?> con = c.getDeclaredConstructor( String.class );

        // 如果 con 对应的构造方法是不是 public 修饰的
        if( !Modifier.isPublic( con.getModifiers() ) ) {
            con.setAccessible( true );
        }

        // 调用构造方法并传入参数
        Object instance = con.newInstance( "屎羊羊" );
        System.out.println( instance );

    }

}
